package com.mybatis.student;

import org.apache.ibatis.exceptions.TooManyResultsException;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class SystemManage {
    public static void main(String[] args) throws IOException {
        // 读取核心配置文件 student/Student-config.xml
        InputStream inputStream;
        inputStream = Resources.getResourceAsStream("config/Student-config.xml"); // 修改为正确的路径
        // 根据配置文件创建 SqlSessionFactory 对象
        SqlSessionFactory ssf;
        ssf = new SqlSessionFactoryBuilder().build(inputStream);
        // 通过 SqlSessionFactory 创建 SqlSession
        SqlSession session = ssf.openSession();
        Student student = session.selectOne("com.mybatis.student.mapper.StudentMapper.queryStudentWithScores", "20220101001");
        System.out.println("查询学号为20220101001的学生信息记录及其关联的学生成绩记录:");
        System.out.println(student);
        // 根据年级和班级查询班级信息记录及其关联的学生成绩记录
        Map<String, Object> params = new HashMap<String, Object>();
        params.put("grade", "高一");
        params.put("class", "1班");
        Clbum clbum = session.selectOne("com.mybatis.student.mapper.SystemMapper.queryClbumWithScore", params);
        if (clbum != null) {
            System.out.println("查询高一、1班的班级信息记录及其关联的学生成绩记录:");
            System.out.println(clbum.toString1());
        } else {
            System.out.println("未找到高一、1班的班级信息记录及其关联的学生成绩记录。");
        }

        // 根据年级和班级查询班级信息记录及其关联的教师信息记录
        params.put("grade", "高一");
        params.put("class", "2班");
        clbum = session.selectOne("com.mybatis.student.mapper.SystemMapper.queryClbumWithTeacher", params);
        System.out.println("查询高一、2班的班级信息记录及其关联的教师信息记录:");
        System.out.println(clbum.toString2());

        // 根据教师编号查询教师信息记录及其多对多关联的班级信息记录
        String teacherId = "T001"; // 假设教师编号为 T001
        Teacher teacher = session.selectOne("com.mybatis.student.mapper.SystemMapper.queryTeacherWithClasses", teacherId);
        if (teacher != null) {
            System.out.println("查询教师编号为 " + teacherId + " 的教师信息记录及其关联的班级信息记录:");
            System.out.println(teacher.toString());
        } else {
            System.out.println("未找到教师编号为 " + teacherId + " 的教师信息记录及其关联的班级信息记录。");
        }

        session.close();
    }
}
